new Vue({
    el: '#app',
    data() {
        return {
            //修改大模型悬浮框是否可以点击
            changeMultiBtn: true,
            showPopover: true,
            //流式控制器
            abortCtrl: null,
            isflageIOX: true,
            clipboard: {
                content: "",
            },
            isResPPt: false,
            currentStep: 1,
            subjectTitle: '',
            //模板列表
            modelList: [{ id: '1', modelName: '', logo: '../images/write/model1.png' },
            { id: '2', modelName: '', logo: '../images/write/model2.png' },
            { id: '3', modelName: '', logo: '../images/write/model2.png' }
            ],
            //素材列表
            materialList: [
                // { id: '1', fileName: '关于XXX的工作方案.docx', type: 'word', fileSize: '120.3KB' },
                // { id: '2', fileName: '关于XXXXX的工作方案.docx', type: 'word', fileSize: '136.52KB' },
                // { id: '3', fileName: '关于XXX的工作方案.docx', type: 'word', fileSize: '120.3KB' },
                // { id: '4', fileName: '关于XXXXX的工作方案.docx', type: 'word', fileSize: '136.52KB' },
            ],
            curPId: '',
            outLineMdContentText: '',
            outLineContentText: '',
            //大纲内容
            outLineMdContent: '',
// `# 交通违法工作方案11

// ## 一、工作目标%2b

// 为有效应对当前交通违法行为的严峻形势，提升道路交通安全水平，特制定本工作方案。本方案旨在明确交通违法治理的总体目标和阶段性任务，通过一系列措施显著降低交通违法行为发生率，同时增强公众交通安全意识，形成遵章守法、文明出行的良好社会风尚。

// ## 二、工作任务

// ### (一)违法行为排查与监测

// #### 任务一:建立违法行为监测系统

// - **实施策略**：充分利用现代科技手段，如智能交通监控系统、大数据分析平台等，构建覆盖全城的交通违法行为监测系统。该系统将实现对重点路段、时段及常见违法行为的实时监控与预警，为精准打击交通违法提供有力支持。
// - **预期成果**：形成高效、精准的交通违法监测网络，提高违法行为的发现率和查处率。

// #### 任务二:定期违法数据统计分析

// - **实施步骤**：建立定期的数据统计分析机制，对监测到的交通违法数据进行深入分析，识别违法高发区域、时段及类型。同时，将分析结果以报告形式呈现，为决策部门提供科学依据。
// - **预期成果**：形成科学的交通违法数据分析报告，为制定和调整治理措施提供有力支撑。

// ### (二)执法力度强化

// #### 任务一:加大现场执法力度

// - **具体措施**：增加路面执法警力，特别是在违法高发时段和路段加强巡逻管控。对发现的交通违法行为进行严厉查处，形成强大的震慑力。
// - **预期效果**：通过加大现场执法力度，有效遏制交通违法行为的蔓延势头。

// #### 任务二:完善非现场执法机制

// - **实施路径**：推广电子警察、移动执法车等非现场执法手段，扩大执法覆盖面。建立健全违法信息录入、审核、告知及处罚流程，确保执法公正、透明。
// - **预期成果**：实现交通违法行为的全方位、全天候监控和查处，提高执法效率和公正性。

// ### (三)宣传教育引导

// #### 任务一:开展交通安全宣传活动

// - **活动形式**：组织开展形式多样的交通安全宣传活动，如主题讲座、展览、媒体宣传等。通过生动形象的案例和深入浅出的讲解，提高公众对交通违法危害性的认识。
// - **预期效果**：增强公众的交通安全意识，形成全社会共同关注交通安全的良好氛围。

// #### 任务二:强化驾驶员教育培训

// - **培训内容**：加强对驾驶员的交通安全教育培训，特别是针对新驾驶员和违法记录较多的驾驶员进行重点教育。培训内容应涵盖交通法规、安全驾驶技巧等方面。
// - **实施方式**：推广交通安全知识在线学习平台，方便驾驶员随时随地进行学习。同时，定期组织线下培训活动，加强实践操作和互动交流。
// - **预期成果**：提高驾驶员的交通安全意识和驾驶技能水平，减少因人为因素导致的交通事故。

// ### (四)社会共治机制建设

// #### 任务一:建立跨部门协作机制

// - **协作内容**：加强与公安、交通、城管等相关部门的沟通协调，形成治理交通违法的合力。通过信息共享、联合执法等方式提高治理效率。
// - **实施方式**：定期召开联席会议，研究解决治理过程中遇到的问题和困难。同时建立快速响应机制，对突发情况进行及时处置。
// - **预期效果**：形成多部门协同作战的良好局面，提高交通违法治理的整体效能。

// #### 任务二:鼓励公众参与监督

// - **监督方式**：建立交通违法举报奖励制度，鼓励公众通过热线电话、网络平台等方式举报交通违法行为。同时加强对举报信息的核实和处理工作确保举报渠道的畅通和有效。
// - **激励机制**：对举报属实的给予适当奖励以激发公众参与监督的积极性。同时加强对举报人的保护工作确保其人身安全不受侵害。
// - **预期效果**：形成全社会共同参与交通违法监督的良好氛围有效遏制交通违法行为的发生。

// ## 三、保障措施

// ### (一)政策支持与资金投入

// - **政策支持**：积极争取政府政策支持将交通违法治理纳入城市发展规划和财政预算确保治理工作的顺利开展。
// - **资金投入**：加大资金投入力度保障监测设备、执法装备及宣传教育活动等所需经费的充足供应。同时加强对资金使用情况的监管确保资金使用的合理性和有效性。

// ### (二)法律法规完善

// - **修订完善**：推动相关法律法规的修订完善为交通违法治理提供更加坚实的法律保障。特别是要加强对新型交通违法行为的法律规制确保治理工作的有法可依、有章可循。
// - **法律培训**：加强对执法人员的法律培训提高其依法行政水平和法律素养。确保在执法过程中能够准确适用法律法规维护社会公平正义。

// ### (三)监督评估与持续改进

// - **监督评估**：建立交通违法治理工作监督评估机制定期对治理效果进行评估。通过评估结果了解治理工作的进展情况和存在的问题为制定和调整治理措施提供依据。
// - **持续改进**：根据评估结果及时调整工作策略持续改进治理措施。确保治理工作能够不断适应新形势、新任务的要求取得更加显著的成效。`,
            outLineContent: '',
// `<h1>交通违法工作方案</h1>
// <h2>一、工作目标</h2>
// <p>为有效应对当前交通违法行为的严峻形势，提升道路交通安全水平，特制定本工作方案。本方案旨在明确交通违法治理的总体目标和阶段性任务，通过一系列措施显著降低交通违法行为发生率，同时增强公众交通安全意识，形成遵章守法、文明出行的良好社会风尚。</p>
// <h2>二、工作任务</h2>
// <h3>(一)违法行为排查与监测</h3>
// <h4>任务一:建立违法行为监测系统</h4>
// <ul>
// <li><strong>实施策略</strong>：充分利用现代科技手段，如智能交通监控系统、大数据分析平台等，构建覆盖全城的交通违法行为监测系统。该系统将实现对重点路段、时段及常见违法行为的实时监控与预警，为精准打击交通违法提供有力支持。</li>
// <li><strong>预期成果</strong>：形成高效、精准的交通违法监测网络，提高违法行为的发现率和查处率。</li>
// </ul>
// <h4>任务二:定期违法数据统计分析</h4>
// <ul>
// <li><strong>实施步骤</strong>：建立定期的数据统计分析机制，对监测到的交通违法数据进行深入分析，识别违法高发区域、时段及类型。同时，将分析结果以报告形式呈现，为决策部门提供科学依据。</li>
// <li><strong>预期成果</strong>：形成科学的交通违法数据分析报告，为制定和调整治理措施提供有力支撑。</li>
// </ul>
// <h3>(二)执法力度强化</h3>
// <h4>任务一:加大现场执法力度</h4>
// <ul>
// <li><strong>具体措施</strong>：增加路面执法警力，特别是在违法高发时段和路段加强巡逻管控。对发现的交通违法行为进行严厉查处，形成强大的震慑力。</li>
// <li><strong>预期效果</strong>：通过加大现场执法力度，有效遏制交通违法行为的蔓延势头。</li>
// </ul>
// <h4>任务二:完善非现场执法机制</h4>
// <ul>
// <li><strong>实施路径</strong>：推广电子警察、移动执法车等非现场执法手段，扩大执法覆盖面。建立健全违法信息录入、审核、告知及处罚流程，确保执法公正、透明。</li>
// <li><strong>预期成果</strong>：实现交通违法行为的全方位、全天候监控和查处，提高执法效率和公正性。</li>
// </ul>
// <h3>(三)宣传教育引导</h3>
// <h4>任务一:开展交通安全宣传活动</h4>
// <ul>
// <li><strong>活动形式</strong>：组织开展形式多样的交通安全宣传活动，如主题讲座、展览、媒体宣传等。通过生动形象的案例和深入浅出的讲解，提高公众对交通违法危害性的认识。</li>
// <li><strong>预期效果</strong>：增强公众的交通安全意识，形成全社会共同关注交通安全的良好氛围。</li>
// </ul>
// <h4>任务二:强化驾驶员教育培训</h4>
// <ul>
// <li><strong>培训内容</strong>：加强对驾驶员的交通安全教育培训，特别是针对新驾驶员和违法记录较多的驾驶员进行重点教育。培训内容应涵盖交通法规、安全驾驶技巧等方面。</li>
// <li><strong>实施方式</strong>：推广交通安全知识在线学习平台，方便驾驶员随时随地进行学习。同时，定期组织线下培训活动，加强实践操作和互动交流。</li>
// <li><strong>预期成果</strong>：提高驾驶员的交通安全意识和驾驶技能水平，减少因人为因素导致的交通事故。</li>
// </ul>
// <h3>(四)社会共治机制建设</h3>
// <h4>任务一:建立跨部门协作机制</h4>
// <ul>
// <li><strong>协作内容</strong>：加强与公安、交通、城管等相关部门的沟通协调，形成治理交通违法的合力。通过信息共享、联合执法等方式提高治理效率。</li>
// <li><strong>实施方式</strong>：定期召开联席会议，研究解决治理过程中遇到的问题和困难。同时建立快速响应机制，对突发情况进行及时处置。</li>
// <li><strong>预期效果</strong>：形成多部门协同作战的良好局面，提高交通违法治理的整体效能。</li>
// </ul>
// <h4>任务二:鼓励公众参与监督</h4>
// <ul>
// <li><strong>监督方式</strong>：建立交通违法举报奖励制度，鼓励公众通过热线电话、网络平台等方式举报交通违法行为。同时加强对举报信息的核实和处理工作确保举报渠道的畅通和有效。</li>
// <li><strong>激励机制</strong>：对举报属实的给予适当奖励以激发公众参与监督的积极性。同时加强对举报人的保护工作确保其人身安全不受侵害。</li>
// <li><strong>预期效果</strong>：形成全社会共同参与交通违法监督的良好氛围有效遏制交通违法行为的发生。</li>
// </ul>
// <h2>三、保障措施</h2>
// <h3>(一)政策支持与资金投入</h3>
// <ul>
// <li><strong>政策支持</strong>：积极争取政府政策支持将交通违法治理纳入城市发展规划和财政预算确保治理工作的顺利开展。</li>
// <li><strong>资金投入</strong>：加大资金投入力度保障监测设备、执法装备及宣传教育活动等所需经费的充足供应。同时加强对资金使用情况的监管确保资金使用的合理性和有效性。</li>
// </ul>
// <h3>(二)法律法规完善</h3>
// <ul>
// <li><strong>修订完善</strong>：推动相关法律法规的修订完善为交通违法治理提供更加坚实的法律保障。特别是要加强对新型交通违法行为的法律规制确保治理工作的有法可依、有章可循。</li>
// <li><strong>法律培训</strong>：加强对执法人员的法律培训提高其依法行政水平和法律素养。确保在执法过程中能够准确适用法律法规维护社会公平正义。</li>
// </ul>
// <h3>(三)监督评估与持续改进</h3>
// <ul>
// <li><strong>监督评估</strong>：建立交通违法治理工作监督评估机制定期对治理效果进行评估。通过评估结果了解治理工作的进展情况和存在的问题为制定和调整治理措施提供依据。</li>
// <li><strong>持续改进</strong>：根据评估结果及时调整工作策略持续改进治理措施。确保治理工作能够不断适应新形势、新任务的要求取得更加显著的成效。</li>
// </ul>
// `,
            //修改中的大纲内容
            editPContent: '',
            //ppt格式方案
            pptResult: {},
            //显示编辑大纲弹窗
            canEditContent: false,
            //显示编辑大纲内容弹窗
            canEditOutlineText: false,
            focus: false,
            requireText: '',
            chatting: false,
            //方案内容
            programMdContent: '',
// `# 标题一
// 内容一人工智能是人类的语言内容一人工智能是xxxxxxxxx
// ## 标题二
// 这个妹妹很骚包
// ### 标题三
// 这篇文章写的很犀利
// 1.列表一
// 2.列表二
// 3.列表三
// #### 标题四
// - First item
// - Second item
// - Third item`,
            programHtmlContent: '',
            //点击一键更正或取消提示
            mOrCMsg: '',
            showMDialog: false,
            showNDialog: false,
            generating: true,
            //当前错误类型
            errorSel:'',
            showErrDialog: false,
            //文件上传
            //0-首页上传，1-扩写等上传
            fileType: 0,
            improveFile: '',
            progressBar: false,
            disabledInp: false,
            fileName: '',
            // 设置每个分片的大小（字节）
            CHUNK_SIZE: 5 * 1024 * 1024 + "", // 1MB
            retryNum: 0,
            myindex: -1,
            fileSuffixs: ["doc", "docx"],
            showErrList: false,
            //语音
            voiceType: 0, //0:没有录音,1:主题,2:内容要求
            subjectTalking: false,
            MODEL_CODE: '1888',
            CAPACITY_CODE: '010115',
            LANG: 'zh',
            WS_URL: '',
            checkSwitch: false,
            VoiceItemID: generateUUID(),
            count: 0,
            checkClick: 1,
            bufferData: [],
            voiceTxt:{
                ind: '',
                old: ''
            },
            myWebsocket: null,
            //展示定位弹窗
            showPositionDialog: false,
            //编辑
            showEditDialog: false,
            //编辑生成内容
            editGenCont: 'Vant 轻量、可靠的移动端 Vue 组件库 介绍 Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前Vant 官方提供了Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团Vant 轻量、可靠的移动端 Vue 组件库 介绍 Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前Vant 官方提供了Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团Vant 轻量、可靠的移动端 Vue 组件库 介绍 Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前Vant 官方提供了Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团',
            actions:[{ text: '编辑' }],
            //需要添加监听事件的元素
            addElementList: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'li'],
            errContList: [],
            attachmentId: '',
            //ppt生成对象
            pptForm: {
                //标题
                title: '',
                //通用模板
                curModelId: '',
            },
            //通用模板列表
            generalList: [
                { id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' },
                { id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' },
                // { id: '7', modelName: '', coverUrl: '../images/ppt/ppt-common1.png' },
                // { id: '8', modelName: '', coverUrl: '../images/ppt/ppt-common2.png' },
            ],
            //通用模板分页信息
            generalPage: {
                page: 1,
                size: 2,
                total: 0,
            },
            //专业模板
            specialList: [
                { id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' },
                { id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' },
                // { id: '7', modelName: '', coverUrl: '../images/ppt/ppt-common1.png' },
                // { id: '8', modelName: '', coverUrl: '../images/ppt/ppt-common2.png' },
                // { id: '5', modelName: '', coverUrl: '../images/ppt/ppt-common1.png' },
                // { id: '6', modelName: '', coverUrl: '../images/ppt/ppt-common2.png' }
            ],
            //专业模板分页信息
            specialPage: {
                page: 1,
                size: 2,
                total: 0,
            },
            //是否加载数据中，节流处理
            generalLoading: false,
            specialLoading: false,
            fileSize: "",
            upLoadFile: false,
            isOutLineContent: false,
            isOutLineContentText: false,
            voiceType: 0,
            prompt: '',
            editType: 0,
            outLineContentEnd: false,
            outLineContentTextEnd: false,

            streaming: false,
        }
    },
    watch: {
        streaming: {
            handler(newValue, oldValue) {
                this.changeMultiBtn = !newValue
            },
            immediate: true
        },
    },
    computed: {
        pairedItems() {
            // 使用Array.prototype.reduce来将数组中的元素两两配对
            return this.modelList.reduce((acc, item, index, array) => {
                // 检查当前索引是否是偶数，并且不是最后一个元素（避免与不存在的下一个元素配对）
                if (index % 2 === 0 && index < array.length - 1) {
                    acc.push([array[index], array[index + 1]]);
                }
                else if (index === array.length - 1) {
                  acc.push([array[index]]);
                }
                return acc;
            }, []);
        },
    },
    created() {
        const _this = this
        let jsApiList = []
        $.getScript("../../../js/jweixin-sgccigw-1.0.0.js" /*"js/jweixin-1.0.0.js"*/, function () {
            'use strict';
            wx.ready(function () {
                wx.onHistoryBack(() => {
                    _this.home()
                    return false
                })
            });
            jsApiList = [
                'previewFile',
                'startRecordVoiceBuffer',
                'ext_AudioRecorder_Start',
                'ext_AudioRecorder_Stop',
                'onRecordBufferReceived',
                'multiWindows_subscribe',
                'stopRecord',
                'onHistoryBack',
            ];
            wx.config({
                beta: true, // 调用wx.invoke形式的接口值时，该值必须为true。
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                appId: corpid,
                timestamp: '1626832073',
                nonceStr: nonceStr,
                signature: signature,
                jsApiList: jsApiList
            });
        });
    },
    mounted() {
        this.compatibleInput()
        this.getModelList(1)
        this.getModelList(4)

        window.addEventListener('contextmenu', (e) => e.preventDefault());
        // console.log("2222")

        // this.currentStep = 3
        // this.outLineContentEnd = true
        // this.isOutLineContent = true
        // this.isResPPt = true
        // this.pptResult = {
        //     id: 1,
        //     name: "测试二分法",
        //     fileSize: "112KB"
        // }
    },
    methods: {
        handleSpecialScroll(event){

            const container = event.target;
            console.log(container.scrollWidth - container.scrollLeft, container.clientWidth)
            if (container.scrollWidth - container.scrollLeft - container.clientWidth < 10) {
                // 已滚动到最右侧
                console.log('已滚动到最右侧');
                //节流
                if(this.specialLoading){
                    return;
                }
                // //当页数*size < total时 page + 1并加载数据
                // if(this.specialPage.current * this.specialPage.size < this.specialPage.total){
                //     this.specialPage.current = this.specialPage.current + 1
                //     //加载数据
                    console.log('当前页：' + this.specialPage.page)
                    this.loadSpecialData(container);
                // } else {
                //     mui.toast('没有更多了', {
                //         duration: 1000,
                //         type: 'div'
                //     })
                // }
            }
        },
        handleGeneralScroll(event){
            const container = event.target;
            if (container.scrollWidth - container.scrollLeft - container.clientWidth < 10) {
                // 已滚动到最右侧
                console.log('已滚动到最右侧');
                //节流
                if(this.generalLoading){
                    return;
                }
                //当页数*size < total时 page + 1并加载数据
                // if(this.generalPage.current * this.generalPage.size < this.generalPage.total){
                //     this.generalPage.current = this.generalPage.current + 1
                    //加载数据
                    console.log('当前页：' + this.generalPage.page)
                    this.loadGeneralData(container);
                // } else {
                //     mui.toast('没有更多了', {
                //         duration: 1000,
                //         type: 'div'
                //     })
                // }
            }
        },
        loadSpecialData(target){
            // $(".curtain").css("display", "block");
            this.specialLoading = true
            setTimeout(() => {
                let total = this.specialPage.total
                let currentTotal = this.specialList.length
                if(total - currentTotal < 1) {
                    return;
                }
                if(total - currentTotal == 1) {
                    this.specialList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                }else if(total - currentTotal > 1){
                    this.specialList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                    this.specialList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                }
                $(target).animate({ scrollLeft: target.scrollLeft + 50},20)
                this.specialPage.page += 1
                this.getModelList(4)
                // $(".curtain").css("display", "none");
                this.specialLoading = false
            }, 1000)
        },
        loadGeneralData(target){
            // $(".curtain").css("display", "block");
            this.generalLoading = true
            setTimeout(() => {
                let total = this.generalPage.total
                let currentTotal = this.generalList.length
                if(total - currentTotal < 1) {
                    return;
                }
                if(total - currentTotal == 1) {
                    this.generalList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                }else if(total - currentTotal > 1){
                    this.generalList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                    this.generalList.push({ id: '-1', modelName: '', coverUrl: '../../../image/loading2.gif' })
                }
                $(target).animate({ scrollLeft: target.scrollLeft + 50},20)
                this.generalPage.page += 1
                this.getModelList(1)
                // $(".curtain").css("display", "none");
                this.generalLoading = false
            }, 1000)
        },
        //开始录音
        startTalk(type) {
            if(0 != this.voiceType) {
                mui.toast('正在录音.', {
                    duration: 'long',
                    type: 'div'
                })
            }else {
                this.voiceType = type
                this.voiceTxt = {
                    ind: '',
                    old: ''
                }
                if(1 == this.voiceType) {
                    this.voiceTxt.ind = this.prompt
                }else if(2 == this.voiceType) {
                    this.voiceTxt.ind = this.subjectTitle
                }
                this.getMeToken()
            }
        },
        //停止录音
        stopTalk(type) {
            this.stopTalkCallBack(type)
            this.stopRecorder()
        },
        stopTalkCallBack() {
            var voiceInput = null;
            var voiceTextarea = null;
            var _text = '';
            if(2 == this.voiceType) {
                _text = this.subjectTitle
                voiceInput = document.getElementById('voiceSubjectTitle')
            }else if(1 == this.voiceType) {
                _text = this.prompt
                voiceTextarea = document.getElementById('voicePrompt')
            }

            if(voiceInput) {
                voiceInput.setSelectionRange(_text.length, _text.length)
                // voiceInput.focus()
                voiceInput.scrollLeft = voiceInput.scrollWidth
            }
            if(voiceTextarea) {
                voiceTextarea.setSelectionRange(_text.length, _text.length)
                // voiceTextarea.focus()
                voiceTextarea.scrollTop = voiceTextarea.scrollHeight
            }
            this.voiceType = 0
        },
        stopRecorder(num) {
            let _this = this
            wx.invoke("ext_AudioRecorder_Stop", {
                data: {}
            },
                function (res) {
                    if (res.err_msg === 'ext_AudioRecorder_Stop:ok') {
                        _this.stopVB(num)
                    }
                    if (res.err_msg === 'ext_AudioRecorder_Stop:fail') {
                        //失败处理
                        console.log(res);
                    }
                    if (res.err_msg === 'ext_AudioRecorder_Stop:cancel') {
                        //取消处理
                        console.log(res);
                    }
                    if (res.err_msg === 'ext_AudioRecorder_Stop:not_support ') {
                        _this.stopVB(num)
                        wx.stopRecordVoiceBuffer({});
                        // if (_this.myWebsocket) {
                        _this.myWebsocket.close();
                    }
                })
        },
        stopVB(num) {
            //成功处理
            this.time = clearInterval(this.time)
            // this.flag = true
            this.checkSwitch = false
            this.checkClick = 0
            $(this).removeClass("stop");
            window.clearInterval($(this).data("interval"));
            $(".record-time").html("");
        },
        getMeToken() {
            let _that = this
            var iscp_port = ''
            if (sessionStorage.getItem("iscp_port")) {
                iscp_port = sessionStorage.getItem("iscp_port");
            }
            userId = sessionStorage.getItem("userId");
            let AuthenticationSession = sessionStorage.getItem("Authentication");
            let timestamp = new Date().getTime() + ""
            let data = {
                "userId": userId,
                "timestamp": timestamp,
            }
            const datas = JSON.stringify(data)
            let sign = sm3(datas);
            $.ajax({
                url: localUrlLink + iscp_port + "/tjAiAssistant/soundRecording/thirdparty",
                type: "post",
                async: false, //是否同步，false表示同步请求
                dataType: "json",
                data: datas,
                headers: {
                    "Content-Type": "application/json;charset=UTF-8",
                    sign: sign,
                    Authentication: AuthenticationSession,
                },
                success: (res, txt, xhr) => {
                    if (sm3(res.resultValueStr) == xhr.getResponseHeader("sign")) {
                        let Authentication = xhr.getResponseHeader("Authentication")
                        if (res.code == 200) {
                            if (Authentication) {
                                sessionStorage.setItem("Authentication", Authentication);
                                _that.WS_URL =
                                    `ws://127.0.0.1:${iscp_port}/websocket/asr/i?token=${res.resultValue}&capacityCode=${_that.CAPACITY_CODE}&language=${_that.LANG}&code=${_that.MODEL_CODE}&sessionId=${_that.VoiceItemID}`
                                if (!('WebSocket' in window)) {
                                    return
                                }
                                if (_that.count < 1) {
                                    wx.invoke("multiWindows_subscribe", { channelId: _that.VoiceItemID }, function (res) {
                                        console.log(res, "订阅返回结果")
                                        console.log(res.data.message, "信息")
                                        if (res.data.method == "onMessage String" && res.data.channelId == _that.VoiceItemID) {
                                            _that.onMessage(res)
                                        } else if (res.data.method == 'onReconnectFinishAndDisconn') {
                                            //重连失败处理
                                            _that.stopVB()
                                        }
                                    });
                                }
                                _that.count++
                                wx.invoke("ext_AudioRecorder_Start", {
                                    data: {
                                        channelId: _that.VoiceItemID,
                                        socketUrl: _that.WS_URL
                                    }
                                },
                                    function (res) {
                                        if (res.err_msg === 'ext_AudioRecorder_Start:ok') {
                                            //成功处理
                                            _that.checkClick = 1
                                            _that.checkSwitch = true
                                        }

                                        if (res.err_msg === 'ext_AudioRecorder_Start:fail') {
                                            //失败处理
                                        }
                                        if (res.err_msg === 'ext_AudioRecorder_Start:cancel') {
                                            //取消处理
                                        }
                                        if (res.err_msg === 'ext_AudioRecorder_Start:not_support ') {
                                        }
                                    })
                            }
                        } else {
                            mui.toast(res.resultValue, {
                                duration: 'long',
                                type: 'div'
                            })
                        }
                    }
                },
                error: (e) => {
                    mui.toast('请求异常,请稍后再试', {
                        duration: 1000,
                        type: 'div'
                    })
                },
            })
        },
        onMessage(evt) {
            try {
                // const data = JSON.parse(evt.data);
                const data = JSON.parse(evt.data.message);
                console.log(evt.data,"内容")
                if (data.code == 200) {
                    // 这一行是赋值的
                    data.word = data.word.replace(/[|]/g, '\n')
                    data.word = data.word.replace(/[\n]/g, '\n\n')
                    this.insertContent(data)
                    // if (data.completed == true) {
                    //     this.voiceTxt.ind += data.word.length
                    //     this.voiceTxt.old = ''
                    //     this.inputDom.setSelectionRange(this.voiceTxt.ind, this.voiceTxt.ind)
                    //     setTimeout(() => {
                    //         this.inputDom.setSelectionRange(this.voiceTxt.ind, this.voiceTxt
                    //             .ind)
                    //     });
                    // }
                } else if (data.code == 'E000004') {
                    mui.toast("当前已达到最大并发量限制,请稍后再试", {
                        duration: 'long',
                        type: 'div'
                    })
                    this.stopRecorder()
                } else {
                    mui.toast(data.code + "语音服务异常", {
                        duration: 'long',
                        type: 'div'
                    })
                    this.stopRecorder()
                }
            } catch (error) {
                throw new Error('解析错误!' + error);
            }
        },
        insertContent(data) {
            let txt = data.word
            let ctxt = ''
            if(data.completed) {
                //完成
                this.voiceTxt.old += txt
                ctxt = this.voiceTxt.old
            }else{
                //未完成
                ctxt = this.voiceTxt.old + txt
            }
            var voiceInput = null;
            var voiceTextarea = null;
            var _text = this.voiceTxt.ind + ctxt;
            if(2 == this.voiceType) {
                this.subjectTitle = this.voiceTxt.ind + ctxt
                voiceInput = document.getElementById('voiceSubjectTitle')
            }else if(1 == this.voiceType) {
                this.prompt = this.voiceTxt.ind + ctxt
                voiceTextarea = document.getElementById('voicePrompt')
            }

            if(voiceInput) {
                voiceInput.setSelectionRange(_text.length-1, _text.length)
                voiceInput.focus()
                voiceInput.scrollLeft = voiceInput.scrollWidth
            }
            if(voiceTextarea) {
                voiceTextarea.setSelectionRange(_text.length-1, _text.length)
                voiceTextarea.focus()
                voiceTextarea.scrollTop = voiceTextarea.scrollHeight
            }
        },
        preview(item) {
            myPreviewFile(item)
        },
        getModelList(type) {
            const userId = sessionStorage.getItem("userId");
            let param = {
                "userId": userId,
                "modelType": "ALI", //getLargeModelType(),
                "type": type,
                "page": 1==type?this.generalPage.page:this.specialPage.page,
                "size": 1==type?this.generalPage.size:this.specialPage.size,
                "timestamp": new Date().getTime() + "",
            };
            let AuthenticationSession = sessionStorage.getItem("Authentication");
            data = JSON.stringify(param)
            let sign = sm3(data);
            $.ajax({
                url: localUrlLink + iscp_port + "/tjAiAssistant/ppt/getTemplatesPage",
                type: "post",
                // async: false, //是否同步，false表示同步请求
                dataType: "json",
                data: data,
                headers: {
                    "Content-Type": "application/json;charset=UTF-8",
                    Authentication: AuthenticationSession,
                    sign: sign
                },
                success: (res, txt, xhr) => {
                    if (res.code == 200) {
                        if(1 == type) {
                            this.generalPage.total = res.resultValue.total
                            this.generalList = this.generalList.filter(item => item.id != '-1')
                            this.generalList = this.generalList.concat(res.resultValue.list)
                        }else {
                            this.specialPage.total = res.resultValue.total
                            this.specialList = this.specialList.filter(item => item.id != '-1')
                            this.specialList = this.specialList.concat(res.resultValue.list)
                        }
                        // this.generalList = res.resultValue.general;
                        // this.specialList = res.resultValue.special;
                    } else {
                        mui.toast('请稍后再试', {
                            duration: 1000,
                            type: 'div'
                        })
                    }
                },
                error: (e) => {
                    $(".curtain").css("display", "none");
                    mui.toast('请稍后再试', {
                        duration: 1000,
                        type: 'div'
                    })
                },
            });
        },
        selModel(item){
            if('-1' == item.id) {
                return
            }
            this.pptForm.curModelId = item.id;
        },
        OutlineCreatePPTX() {
            if('' == this.pptForm.title) {
                $(".curtain").css("display", "none");
                mui.toast('请填写文件标题', {
                    duration: 'long',
                    type: 'div'
                })
                return false
            }
            if('' == this.pptForm.curModelId) {
                $(".curtain").css("display", "none");
                mui.toast('请上选择模板', {
                    duration: 'long',
                    type: 'div'
                })
                return false
            }
            const userId = sessionStorage.getItem("userId");
            let param = {
                "userId": userId,
                "curModelId": this.pptForm.curModelId,
                "fileName": this.pptForm.title,
                "outlineContent": this.outLineMdContentText,
                "modelType": "ALI", //getLargeModelType(),
                "timestamp": new Date().getTime() + "",
            };
            // $(".curtain").css("display", "block");
            this.currentStep = 3;
            this.isResPPt = true;
            setTimeout(() => {
                this.handleScrollBottom('outlineContentRef')
                this.handleScrollBottom('step3Ref')
            }, 100);
            this.abortCtrl = streamChat(localUrlLink + iscp_port + "/tjAiAssistant/ppt/OutlineCreatePPTX", param,
                (res) => {
                    //成功回调
                    this.streaming = true
                    console.log(res)
                    if (res.code == 200) {
                        $(".curtain").css("display", "none");
                        this.pptResult = res.resultValue;
                        this.pptResult.fileSize = calcFileSize(this.pptResult.size);
                    } else {
                        this.streaming = false
                        $(".curtain").css("display", "none");
                        mui.toast('请稍后再试', {
                            duration: 1000,
                            type: 'div'
                        })
                    }
                }, (err) => {
                    this.streaming = false
                    //失败回调
                    $(".curtain").css("display", "none");
                    mui.toast('请稍后再试', {
                        duration: 1000,
                        type: 'div'
                    })
                }, res => {
                    // this.chatEnd = true
                    this.streaming = false
                    mui.toast("PPT生成完成", { duration: "long", type: "div" })
                    $(".curtain").css("display", "none");
                });
        },
        createOutline() {
            if('' == this.subjectTitle) {
                $(".curtain").css("display", "none");
                mui.toast('请填写文件标题', {
                    duration: 'long',
                    type: 'div'
                })
                return false
            }
            // if(false == this.upLoadFile) {
            //     $(".curtain").css("display", "none");
            //     mui.toast('请上传文件', {
            //         duration: 'long',
            //         type: 'div'
            //     })
            //     return false
            // }
            const userId = sessionStorage.getItem("userId");
            let param = {
                "userId": userId,
                "attachmentId": this.attachmentId,
                "subject": this.subjectTitle,
                "prompt": this.prompt,
                "modelType": "ALI", //getLargeModelType(),
                "timestamp": new Date().getTime() + "",
            };
            this.outLineMdContent = ''
            this.currentStep = this.currentStep + 1
            this.abortCtrl = streamChat(localUrlLink + iscp_port + "/tjAiAssistant/ppt/createOutline", param,
                (res) => {
                    //成功回调
                    this.streaming = true
                    console.log(res)
                    if (res.code == 200) {
                        // $(".curtain").css("display", "none");
                        // this.currentStep = 2
                        $(".curtain").css("display", "none");
                        this.isOutLineContent = true
                        let result = res.resultValue
                        // if (result.status == 4) {


                        //     console.log("结束", this.currentStep);
                        // }
                        this.outLineMdContent += result.text
                        // 将Markdown转换为HTML
                        this.outLineContent = this.markdown2Html(this.outLineMdContent)
                        this.handleScrollBottom('outlineRef')
                    } else {
                        this.streaming = false
                        $(".curtain").css("display", "none");
                        mui.toast("生成大纲异常", { duration: "long", type: "div" });
                    }
                }, (err) => {
                    //失败回调
                    this.streaming = false
                    $(".curtain").css("display", "none");
                    mui.toast("生成大纲异常", { duration: "long", type: "div" });
                }, e => {
                    //请求完成
                    this.streaming = false
                    this.outLineContentEnd = true
                    $(".curtain").css("display", "none");
                    mui.toast("大纲生成完成", { duration: "long", type: "div" });
                });

        },
        createOutlineText() {
            const userId = sessionStorage.getItem("userId");
            let param = {
                "userId": userId,
                "outLineMdContent": this.outLineMdContent,
                "modelType": "ALI", //getLargeModelType(),
                "timestamp": new Date().getTime() + "",
            };
            this.outLineMdContent = ''
            this.currentStep = this.currentStep + 1
            this.abortCtrl = streamChat(localUrlLink + iscp_port + "/tjAiAssistant/ppt/generateOutlineContent", param,
                (res) => {
                    //成功回调
                    this.streaming = true
                    console.log(res)
                    if (res.code == 200) {
                        // $(".curtain").css("display", "none");
                        // this.currentStep = 2
                        $(".curtain").css("display", "none");
                        this.isOutLineContentText = true
                        let result = res.resultValue
                        // if (result.status == 4) {


                        //     console.log("结束", this.currentStep);
                        // }
                        this.outLineMdContentText += result.text
                        // 将Markdown转换为HTML
                        this.outLineContentText = this.markdown2Html(this.outLineMdContentText)
                        this.handleScrollBottom('outlineContentRef')
                    } else {
                        this.streaming = false
                        $(".curtain").css("display", "none");
                        mui.toast("生成大纲内容异常", { duration: "long", type: "div" });
                    }
                }, (err) => {
                    //失败回调
                    this.streaming = false
                    $(".curtain").css("display", "none");
                    mui.toast("生成大纲内容异常", { duration: "long", type: "div" });
                }, e => {
                    //请求完成
                    this.streaming = false
                    this.outLineContentTextEnd = true
                    $(".curtain").css("display", "none");
                    mui.toast("大纲内容生成完成", { duration: "long", type: "div" });
                });
        },
        markdown2Html(tmd) {
            let md = tmd.replace(/\`\`\`markdown/g, '').replace(/\`\`\`/g, '').replace(/\n/g, "  \n")
            return marked.parse(md)
        },
        //上一步
        preStep(){
            if(2 == this.currentStep){
                this.outLineContent = ''
            }
            this.currentStep = this.currentStep - 1
        },
        //下一步
        nextStep() {
            if(this.streaming) {
                mui.toast('生成中不能跳转', {
                    duration: 1000,
                    type: 'div'
                })
                return
            }
            $(".curtain").css("display", "block");
            if(1 == this.currentStep) {
                //生成大纲
                this.createOutline()
            } else if(2 == this.currentStep){
                //生成大纲内容

                this.createOutlineText()
            }else if(3 == this.currentStep){
                //生成内容
                $(".curtain").css("display", "none");
                this.currentStep = this.currentStep + 1
                this.pptForm.title = this.subjectTitle
                console.log("当前步骤数",this.currentStep);

            } else if(4 == this.currentStep){
                //生成内容
                console.log("生成ppt");

                this.OutlineCreatePPTX()
            }
        },
        //关闭编辑
        closePopOver(){
            //移除所有的edit样式
            let pEle = document.getElementById(this.curPId)
            document.getElementById('edit-popover').style.display = 'none'
            pEle.classList.remove('p-edit')
        },
        //添加点击事件
        addClickEvent(){
            setTimeout(()=>{
                this.$nextTick(() => {
                    // 获取div元素
                    var div = document.getElementById('step3-mdBody');

                    this.addElementList.forEach((em) => {
                        // 获取div内的所有元素
                        var pItems = div.querySelectorAll(em);

                        // 添加事件监听器
                        pItems.forEach((pElement) => {
                            pElement.addEventListener('click', (event) => {
                                var clsItems = document.querySelectorAll(".p-edit");
                                if(clsItems){
                                    clsItems.forEach((cItem) => {
                                        cItem.classList.remove('p-edit')
                                    })
                                }

                                pElement.classList.add("p-edit"); // 增加class
                                if(!pElement.id) {
                                    pElement.id = 'md-'+em+'-' + new Date().getTime();
                                }

                                this.curPId = pElement.id
                                this.showPopover = true
                                document.getElementById('edit-popover').style.display = 'block'
                                document.getElementById('edit-popover').style.top = 'calc('+pElement.offsetTop+'px - 3rem)'
                                document.getElementById('edit-popover').style.left = '-30px'
                            });
                        });
                    })
                });
            },500)

        },
        handleEditPContent(){
            let pEle = document.getElementById(this.curPId)
            phtml = pEle.innerHTML
            document.getElementById('edit-popover').style.display = 'none'
            pEle.classList.remove('p-edit')
            this.showEditDialog = true
            this.editGenCont = phtml
        },
        //编辑大纲
        editoutLineContent(type) {
            this.canEditContent = true;
            //解决点击与滑动冲突
            this.$nextTick(()=>{
                // 假设有一个父元素 #parent 和多个子元素 .child
                const parent = document.getElementById('mdBody');

                // 标志位，初始化为false
                let isScrolling = false;
                // 触摸开始事件
                parent.addEventListener('touchstart', function(e) {
                    debugger
                    // 设置滑动标志位
                    isScrolling = true;
                });

                // 触摸结束事件
                parent.addEventListener('touchend', function(e) {
                    // 重置滑动标志位
                    debugger
                    console.log("touchend")
                    isScrolling = false;
                });

                // 点击事件
                parent.addEventListener('click', function(e) {
                    // 只在非滑动状态下执行点击操作
                    if (!isScrolling) {
                        // 执行点击后的操作
                        console.log("click")
                    }
                    // 阻止点击事件冒泡，防止影响滑动
                    e.stopPropagation();
                });

                // 滑动事件
                parent.addEventListener('touchmove', function(e) {
                    // 只在滑动状态下执行滑动操作
                    console.log("touchmove")
                    if (isScrolling) {
                        // 执行滑动后的操作
                    }
                    // 阻止滑动事件冒泡，防止影响点击
                    e.stopPropagation();
                });
            });
            this.editType = type;
            if(type === 1) {
                this.editPContent = Object.assign(this.outLineContent)
            }else if(type === 0) {
                this.editPContent = Object.assign(this.outLineContentText)
            }

            this.$nextTick(() => {
                document.getElementById('mdBody').addEventListener('keydown', function (event) {
                    if (event.key === 'Enter') {
                        const selection = getSelection()
                        // let titleNodeNames = ["h1", "h2", "h3", "h4", "h5", "h6", "li"];
                        // if(!titleNodeNames.includes(selection.focusNode.parentElement.nodeName).toLowerCase) {
                        //     event.preventDefault();
                        //     return;
                        // }
                        if (selection.focusOffset == getSelection().focusNode.length) {
                            event.preventDefault(); // 阻止默认行为，即不换行
                            var range, node;
                            // 获取已存在的div
                            const curNode = window.getSelection().focusNode;
                            // 创建新的div
                            var newH = document.createElement(window.getSelection().focusNode.parentElement.nodeName);

                            // 将新的div添加到已存在的div之后
                            curNode.parentNode.parentElement.insertBefore(newH, curNode.parentNode.nextSibling);

                            // 清除已有的选区
                            window.getSelection().removeAllRanges();

                            // 创建一个新的range对象
                            var range = document.createRange();
                            range.setStart(newH, 0); // index是你想要设置的光标位置

                            // 并将其添加到选区
                            var _selection = window.getSelection();
                            _selection.addRange(range);
                        }
                    }
                });
            })

        },
        //取消修改大纲
        cancleEdit() {
            this.canEditContent = false;
            //清除编辑数据
            this.editPContent = ''
        },
        //确认修改大纲
        confirmEdit() {
            this.canEditContent = false;
            let mdBody = document.getElementById('mdBody');
            if( this.editType === 1) {
                this.outLineContent = mdBody.innerHTML;
                this.outLineMdContent = html2Md(this.outLineContent)
            }else if(this.editType === 0) {
                this.outLineContentText = mdBody.innerHTML;
                this.outLineMdContentText = html2Md(this.outLineContentText)
            }

        },

        //编辑取消
        editCancle(){
            this.curPId = ''
            this.showEditDialog = false
        },
        //编辑确认
        editConfirm(){
            let pEle = document.getElementById(this.curPId)
            pEle.innerHTML = this.editGenCont
            this.curPId = ''
            this.showEditDialog = false
        },
        uploadFunc(type) {
            if(1 == type) {
                mui.toast("请选择修改内容", { duration: "long", type: "div" });
                return
            }
            this.fileType = type
            let _that = this
            wx.invoke("ext_FileBrowser_StartPreView", {}, function (res) {
                _that.channelId = "ppt_upload_" + _that.createNonceStr(8) + new Date().getTime() + "";

                if (_that.isflageIOX) {
                    const suffix = res.name.split('.').reverse()[0]
                    if (!_that.fileSuffixs.includes(suffix.toLocaleLowerCase())) {
                        mui.toast('请选择WORD文档', {
                            duration: 'long',
                            type: 'div'
                        })
                        return
                    }
                    if (checkFileNameForSensitiveWords(res.name)) {
                        mui.toast('检测到敏感内容，请确认后再试。', {
                            duration: 'long',
                            type: 'div'
                        })
                        return false
                    }
                    _that.checkList(res.filePath, res.name, _that.channelId, res.size)
                } else {
                    let recordArr = JSON.parse(res.result)
                    const suffix = recordArr[0].name.split('.').reverse()[0]
                    if (!_that.fileSuffixs.includes(suffix.toLocaleLowerCase())) {
                        mui.toast('请选择WORD文档', {
                            duration: 'long',
                            type: 'div'
                        })
                        return
                    }
                    if (checkFileNameForSensitiveWords(recordArr[0].name)) {
                        mui.toast('检测到敏感内容，请确认后再试。', {
                            duration: 'long',
                            type: 'div'
                        })
                        return false
                    }
                    _that.checkList(recordArr[0].path, recordArr[0].name, _that.channelId, recordArr[0].fileSize)
                }
            })
        },
        checkList(path, name, id, fileSize, hash, index) {
            $(".curtain").css("display", "block");
            let that = this
            that.disabledInp = true
            that.progressBar = true
            let iscp_port
            if (sessionStorage.getItem("iscp_port")) {
                iscp_port = sessionStorage.getItem("iscp_port");
            } else {
                iscp_port = ""
            }
            let Authentication = sessionStorage.getItem("Authentication");
            const timestamp = new Date().getTime() + ""
            let userId = sessionStorage.getItem("userId");
            let sign = sm3(timestamp + "&" + userId)
            that.fileName = name
            that.fileSize = that.calcFileSize(fileSize)
            wx.invoke("ext_Net_FragmentUpload", {
                data: {
                    serverAddress: localUrlLink + iscp_port + `/tjAiAssistant/storage/splitUpload2?channelId=${id}`,
                    filePath: path,
                    fragmentSize: that.CHUNK_SIZE,
                    fileName: name,
                    fileHash: hash ? hash : '',
                    upLoadFragmentIndex: index ? index : '',
                    channelId: id,
                    headerData: {
                        sign: sign,
                        userId: userId,
                        type: '',
                        timestamp: timestamp,
                        Authentication: Authentication,
                    }
                },
            }, function (res) {
                if (res.err_msg.endsWith(":ok")) { //成功结果
                    //上传完成
                    // that.recording(id)
                    $(".curtain").css("display", "none");
                    mui.toast("上传成功", {
                        duration: "long",
                        type: "div"
                    });
                    const suffix = name.split('.').reverse()[0]
                    that.attachmentId = id;
                    that.upLoadFile = true
                    addPendingData(109, id)
                } else if (res.err_msg.endsWith(":cancel")) {
                    $(".curtain").css("display", "none");
                    that.cleanData();
                    return
                } else {
                    $(".curtain").css("display", "none");
                    //上传失败
                    if (that.myindex != Number(res.upLoadFragmentIndex)) {
                        that.myindex = Number(res.upLoadFragmentIndex);
                        that.retryNum = 0;
                    }
                    setTimeout(() => {
                        if (that.retryNum > 4) {
                            // that.retryNum = 0
                            var btnArray = ["取消", "确定"];
                            var i = 0
                            mui.confirm(
                                "是否进行重试？",
                                "上传失败",
                                btnArray,
                                (e) => {
                                    if (i > 0) return
                                    i++
                                    if (e.index == 1) {
                                        that.checkList(path, name, id, fileSize, res.fileHash, res.upLoadFragmentIndex)
                                    } else {
                                        that.cleanData()
                                    }
                                }
                            );
                        } else {
                            that.retryNum++

                            that.checkList(path, name, id, fileSize, res.fileHash, res.upLoadFragmentIndex)
                        }

                    }, (that.retryNum + 1) * 1000)

                }
            })
        },
        calcFileSize(fileSize) {
            let kbf = (Math.floor((fileSize / 1024) * 100) / 100).toFixed(2);
            if (kbf > 1000) {
                //显示 MB
                return (Math.floor((fileSize / (1024 * 1024)) * 100) / 100).toFixed(2) + 'MB';
            }
            return kbf + 'KB';
        },
        cleanData() {
            this.disabledInp = false
        },

        handleScrollBottom(refName) {
            // this.$nextTick(() => {
                let scrollElem = this.$refs[refName];
                if(scrollElem) {
                    $(scrollElem).stop(true, true)
                    $(scrollElem).animate({ scrollTop: $(scrollElem).prop('scrollHeight')},20)
                }
            // })
        },
        //分享
        share(result) {
            shareIgw({
                sceneNo: '109',
                shareType: 1,
                attchId: result.id
            })
         },
        //发送邮件
        sendMail(result) {
            mySendMail('大纲生成PPT',"answerAttach=" + result.id,10,9)
         },
        syncToInner(result) {
            mySyncToInner('大纲生成PPT',"answerAttach=" + result.id,10,9)
         },
        //复制按钮
        copy() {
            let text1 = this.clipboard.content;
            var clipboard = new Clipboard(".tag-read", {
                // 通过target指定要复印的节点
                text: function () {
                    return text1;
                },
            });
            clipboard.on("success", (e) => {
                addOperator(2, 11, "复制文本", 1, 1, "复制成功");
                mui.toast("复制成功", {
                    duration: "long",
                    type: "div"
                });
            });
            clipboard.on("error", (e) => {
                addOperator(2, 11, "复制文本", 1, 0, "复制失败");
            });
        },
        // 判断安卓还是ios
        compatibleInput() {
            //获取浏览器的userAgent,并转化为小写
            var ua = navigator.userAgent.toLowerCase();
            //判断是否是苹果手机，是则是true
            var isIos = ua.indexOf("iphone") != -1 || ua.indexOf("ipad") != -1;
            if (isIos) {
                this.isflageIOX = true;
            } else {
                this.isflageIOX = false;
            }
        },
        home() {
            $(location).attr("href", "index.html");
        },
        createSgin(data) {
            let hashData = sm3(data);
            let hashData_last = sm3(hashData);
            hashData_last = hashData_last.substr(0, 5);
            hashData += hashData_last;
            let sign = hashData;
            return sign;
        },
        createNonceStr(len) {
            var e = len ? len : 16;
            var t =
              "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
              a = t.length,
              n = "";
            for (i = 0; i < e; i++)
              n += t.charAt(Math.floor(Math.random() * a));
            return n;
        },
    }
})
